/*!
  \file
  Implementation of FFT for HHVolumeGPU (uses CUFFT)
*/

#ifndef FFT_IMAGE_HHV_GPU_HPP
#define FFT_IMAGE_HHV_GPU_HPP

#include "fftimage.hpp"
#include "hhvgpu.hpp"

class FFTimageCUDA : public FFTimage {
public:
  //! Forward transform interface
  virtual void Forward( SciGPU::HHV::HHVolume< std::complex<float>,2>& dst,
                        const SciGPU::HHV::HHVolume<float,2>& src ) const;

  //! Inverse transform interface
  virtual void Inverse( SciGPU::HHV::HHVolume<float,2>& dst,
                        const SciGPU::HHV::HHVolume< std::complex<float>,2>& src ) const;
private:
  void ForwardTransform( SciGPU::HHV::HHVolumeGPU< std::complex<float>,2>& dst,
                         const SciGPU::HHV::HHVolumeGPU<float,2>& src ) const;

  void InverseTransform( SciGPU::HHV::HHVolumeGPU<float,2>& dst,
                        const SciGPU::HHV::HHVolumeGPU< std::complex<float>,2>& src ) const;
};


#endif
